package com.xncoding.aop.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * @within
 * 匹配指定的注解内定义的方法
 */
@Aspect
@Component
public class AopAWithin {

    /**
     * 拦截目标方法的类上有Ann9注解
     */
    @Pointcut("@within(com.xncoding.aop.annotation.Awithin.Ann9)")
    public void pc00() {
    }
    /**
     * 只会拦截ann10注解的方法，子类不算
     * 若ann10定义的时候添加@Inherited，子类就可以
     */
    @Pointcut("@within(com.xncoding.aop.annotation.Awithin.Ann10)")
    public void pc01() {
    }

    @Around("pc00()")
    public void Around00(ProceedingJoinPoint joinPoint) {
        System.out.println(joinPoint);
    }

    @Around("pc01()")
    public void Around01(ProceedingJoinPoint joinPoint) {
        System.out.println(joinPoint);
    }

}
